//
//  Podfile语法.h
//  Source
//
//  Created by startimes on 2021/10/15.
//

# 表示警告

#pragma mark - workspace: 指定一个workspace, 如果没有会创建一个
workspace 'TT.xcworkspace'

#pragma mark - source: 全局源/ 指定源
source： 默认被指定的依赖项会在全局级别的指定源中匹配搜索。可以为特依赖关系指定源
source 'https://github.com/CocoaPods/Specs.git'
pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'

#pragma mark - platform: 用于指明应建立的静态库的平台
cocoapods默认指定的平台配置：
    · iOS->4.3
    · OS X->10.6
    · tvOS->9.0
    · watchOS->2.0
如果部署target需要iOS<4.3,armv6架构讲被添加到ARCHS
使用:
#指定具体平台和版本
platform :ios, ‘4.0'

#pragma mark - 屏蔽警告
Inhibit_all_warnings! : 忽略cocoapods依赖库的警告
1. 全局
inhibit_all_warnings!

2. target
target 'C' do
    inhibit_all_warnings!
end

3. 指定某个库
pod 'SSZipArchive', :inhibit_warnings => true

#pragma mark - use_frameworks!
通过指定 use_frameworks! 要求生成的是framework而不是静态库，swift没有静态库

#pragma mark - generate_bridge_support!
指定后从所有已经安装的pod的头文件中会生成一个BridgeSupport元数据文档
一些脚本语言例如MacRuby,Nu,JSCocoa能够利用这些作为桥接类型、函数等等

#pragma mark - set_arc_compatibility_flag!
指定后-fobjc-arc flag会被添加到OTHER_LD_FLAGS中
这个是用来解决编译non-ARC项目出现的一个的bug(详见 #142).
本来这些事情都是有Xcode4.3.2中的libtool自动完成的, 不过看来现在flag -fobjc-arc 已经不被支持了.
所以必须显示的指定使用这个方法

这个方法在CocoaPods 1.0中也许会被废弃

#pragma mark - target
target '对应项目中的 targets name' do

end

#pragma mark - abstract_target: 定义一个抽象target
abstract_target 'CustormTarget' do
    pod 'AlamoFire'

    # TestApp 会继承 CustormTarget 引入 AlamoFire
    target 'TestApp'

    # WeApp 会继承 CustormTarget 引入 AlamoFire, 并且会引入自己内部的依赖项 Adjust
    target 'WeApp' do
        pod 'Adjust', '~> 4.29.2'
    end
end

#pragma mark - abstract! 指定当前target是抽象target
target 'A' do
     abstract!
 end

#pragma mark - inherit! 设置当前target的继承关系
target 'App’ do
    target 'A' do
        #这个target 继承 父级所有行为
        inherit! :complete
    end
    target 'B' do
        #这个target 不继承 父级所有行为
        inherit! :none
    end
    target 'C' do
        #target 仅继承 父级的搜索路劲
        inherit! :search_paths
    end
end

#pragma mark - project 知名安装在哪个project下

target 'TEST' do
  project 'TEST/TEST.xcodeproj'
  
  common_json_pods
end

#pragma mark - 约定版本说明
/** 约定版本说明
 >0.1, 高于0.1的任何版本
 >=0.1, 版本0.1和任何更高版本
 <0.1, 低于0.1的任何版本
 <=0.1, 版本0.1和任何较低的版本
 〜>0.1.2, 版本 0.1.2的版本到0.2 ,不包括0.2.
 这个基于你指定的版本号的最后一个部分.
 这个例子等效于>= 0.1.2并且 <0.2.0，并且始终是你指定范围内的最新版本
 */

#pragma mark - hook
1. Plugin : 指定应在安装期间使用的插件.
使用此方法指定应在安装期间使用的插件, 以及当它被调用时, 应传递给插件的选项
# 指定在安装期间使用cocoapods-keys和slather这两个插件
plugin 'cocoapods-keys', :keyring => 'Eidolon' plugin 'slather'

2. pre_install: 当我们下载完成, 但是还没有安装之时, 可以使用hook机制通过pre_install指定要做更改, 更改完之后进入安装阶段
pre_install do |installer|
  # Do something fancy!
end

3. post_install: 当我们安装完成, 但是生成的工程还没有写入磁盘之时, 我们可以指定要执行的操作
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
    end
  end
end

#pragma mark - def 声明一个pod集
def other
  pod 'Adjust', '~> 4.29.2'
end

target 'MyTarget' do
    other
end

#pragma mark - Build configurations(编译配置)
默认情况下如果不指定具体生成配置, 那么会包含在所有的配置中, 如果你想具体指定就必须手动指明
1. 指定build configuration
只有在Debug和Beta模式下才有启用配置
pod 'PonyDebugger', :configurations => ['Debug', 'Beta']

#pragma mark - Subspecs
安装指定模块
# 仅安装QueryKit库下的Attribute模块
pod 'QueryKit/Attribute'

# 仅安装QueryKit下的Attribute和QuerySet模块
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

#pragma mark - path
根据path引入库
使用本地文件
pod 'AFNetworking', :path => '~/Documents/AFNetworking'

#pragma mark - git: 根据git地址引入库
1. git 默认分支master
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'

2. git & branch
根据git的指定branch地址引入库
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'

3. git & tag
根据git的指定tag引入库
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'

4. git & commit
根据git的指定commit引入库
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

#pragma mark - podspec: 使用给定podspec文件中定义的代码库的依赖关系
从外部引入 -> podspec引入
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

# 不指定表示使用根目录下的podspec，默认一般都会放在根目录下
podspec
# 如果podspec的名字与库名不一样，可以通过这样来指定
podspec :name => 'QuickDialog'
# 如果podspec不是在根目录下，那么可以通过:path来指定路径
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'

#pragma mark - Podfile.lock文件
当团队中的某个人执行完pod install命令后, 生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本, 这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后, 再去执行pod install命令时, 获取下来的Pods依赖库的版本就和最开始用户获取到的版本一致.
如果没有Podfile.lock文件, 后续所有用户执行pod install命令都会获取最新版本的SBJson, 这就有可能造成同一个团队使用的依赖库版本不一致, 这对团队协作来说绝对是个灾难!

#pragma mark - 例子
source 'https://gitlab.startimes.me/startimesapp/iOSSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ‘10.0’
#use_frameworks!
use_modular_headers!
inhibit_all_warnings!

def other
  pod 'Adjust', '~> 4.29.2'
end

target 'Source' do
  other
  
  #删除WebViewJavascriptBridge中的WebViewJavascriptBridge.h和WebViewJavascriptBridge.m文件
  pre_install do |installer|
    dir_web = File.join(installer.sandbox.pod_dir('WebViewJavascriptBridge'), 'WebViewJavascriptBridge')
    Dir.foreach(dir_web) {|x|
      real_path = File.join(dir_web, x)
      if (!File.directory?(real_path) && File.exists?(real_path))
        if(x == 'WebViewJavascriptBridge.h' || x == 'WebViewJavascriptBridge.m')
          File.delete(real_path)
        end
      end
    }
  end
  
  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
      end
    end
  end
end
